package com.atwork.wuhua.base;


import com.atwork.wuhua.mvp.Callback;

import java.util.Map;

import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.ObservableTransformer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;

public abstract class BaseModel<T> {
    //数据请求参数
    public BaseReq mParams;

    /**
     *
     * @param req 设置数据请求参数
     * @return
     */
    public BaseModel params(BaseReq  req) {
        mParams = req;

        return this;
    }
    /**
     *
     * @param req 设置数据请求参数
     * @param flag  是否需要公共参数
     * @return
     */
    public BaseModel params(BaseReq  req, boolean flag) {
        mParams = req;
        if (flag==true){
//            UserUtil.getTokenAndOpenid(MyApplication.getMyApplication(), req);
        }
        return this;
    }

    // 添加Callback并执行数据请求
    // 具体的数据请求由子类实现
    public abstract void execute(Callback<T> callback);

    // 执行Get网络请求，此类看需求由自己选择写与不写
    protected void requestGetAPI(String url, Callback<T> callback) {
        //这里写具体的网络请求
    }

    // 执行Post网络请求，此类看需求由自己选择写与不写
    protected void requestPostAPI(String url, Map params, Callback<T> callback) {
        //这里写具体的网络请求
    }
    public <Z> ObservableTransformer<Z, Z> setThread() {
        return new ObservableTransformer<Z, Z>() {
            @Override
            public ObservableSource<Z> apply(Observable<Z> upstream) {
                return upstream.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
            }
        };
    }
}
